package br.com.despesasPlan.sql;

import java.util.ArrayList;

import br.com.despesasPlan.modelo.Pessoa;
import br.com.despesasPlan.util.StringUtil;

public abstract class GenericSql {
	public static String getSqlInsert(String nomeTabela, String[] campos) {
		String sqlToReturn = "";
		StringBuilder sb = new StringBuilder(" INSERT INTO ");
		if (!StringUtil.isNotNullAndEquals("", nomeTabela) && campos.length > 0) {
			sb.append(nomeTabela).append(" (");
			int index = 1;
			for (String s: campos) {
				sb.append(s);
				sb.append((campos.length > 1 && index < campos.length) ? "," : "");
				index++;
			}
			sb.append(") VALUES (");
			index = 1;
			for (String s: campos) {
				sb.append("?");
				sb.append((campos.length > 1 && index < campos.length) ? "," : "");
				index++;
			}
			sb.append(")");
			sqlToReturn = sb.toString();
		}
		return sqlToReturn;
	}
	
	public static String getSqlObject(String nomeTabela) {
		String sqlToReturn = "";
		StringBuilder sb = new StringBuilder(" SELECT * FROM ");
		if (!StringUtil.isNotNullAndEquals("", nomeTabela)) {
			sb.append(nomeTabela);
			sb.append(" WHERE id = ? ");
			sqlToReturn = sb.toString();
		}
		return sqlToReturn;
	}
	
	public static String getSqlObjectList(String nomeTabela, String[] campos, ArrayList<Object> objectList) {
		String sqlToReturn = "";
		StringBuilder sb = new StringBuilder(" SELECT * FROM ");
		if (!StringUtil.isNotNullAndEquals("", nomeTabela) && campos.length > 0) {
			sb.append(nomeTabela);
			sb.append(" WHERE 1 = 1 ");
			int index = 1;
			for (String s: campos) {
				if (objectList.get(index-1) != null) {
					sb.append(" AND ").append(s).append(" = ? ");
					sb.append((campos.length > 1 && index < campos.length) ? "," : "");
				}
				index++;
			}
			sqlToReturn = sb.toString();
		}
		return sqlToReturn;
	}
	
	public static String getSqlUpdate(String nomeTabela, String[] campos) {
		String sqlToReturn = "";
		StringBuilder sb = new StringBuilder(" UPDATE ");
		if (!StringUtil.isNotNullAndEquals("", nomeTabela) && campos.length > 0) {
			sb.append(nomeTabela).append(" SET ");
			int index = 1;
			for (String s: campos) {
				if (!StringUtil.isNotNullAndEquals("id", s)) {
					sb.append(s).append(" = ? ");
					sb.append((campos.length > 1 && index < campos.length) ? "," : "");
				}
				index++;
			}
			sb.append(" WHERE id = ? ");
			sqlToReturn = sb.toString();
		}
		return sqlToReturn;
	}
	
	public static String getSqlDelete(String nomeTabela, String[] campos) {
		String sqlToReturn = "";
		StringBuilder sb = new StringBuilder(" DELETE FROM ");
		if (!StringUtil.isNotNullAndEquals("", nomeTabela) && campos.length > 0) {
			sb.append(nomeTabela);
			for (String s: campos) {
				if (StringUtil.isNotNullAndEquals("id", s)) {
					sb.append(" WHERE id = ? ");
				}
			}
			sqlToReturn = sb.toString();
		}
		return sqlToReturn;
	}
	
	public static String getSqlProximoCodigo(String tabela) {
		StringBuilder sb = new StringBuilder(" SELECT MAX(id) AS id FROM ");
		sb.append(tabela);
		return sb.toString();
	}
}
